﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace QuanLyBanVeXe
{
    public partial class FormTaiKhoan : Form
    {
        public FormTaiKhoan()
        {
            InitializeComponent();
        }

        public SqlConnection myConnection;
        public SqlCommand myCommand;
        SqlDataAdapter myDataAdapter;
        private DataTable dt = new DataTable();
        private void FormTaiKhoan_Load(object sender, EventArgs e)
        {
            LoadList(sender,e);
        }
        public void KetNoi()
        {
            string strconnect = @"server=.\SQLEXPRESS; database=QuanLyBanVeXe; integrated security=true";
            myConnection = new SqlConnection(strconnect);
            myCommand = myConnection.CreateCommand();
        }
        private void LoadList(object sender, EventArgs e)
        {
            KetNoi();
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = "select  * FROM TaiKhoan";
            try
            {
                if (this.myConnection.State == ConnectionState.Closed)
                    this.myConnection.Open();
                myDataAdapter = new SqlDataAdapter(myCommand);
                DataSet ds = new DataSet();
                myDataAdapter.Fill(ds, "TaiKhoan");
                this.dgvListTaiKhoan.DataSource = ds.Tables[0];
                this.myConnection.Close();
            }
            catch
            {
                MessageBox.Show("Lối kết nối");
            }

            ssCount.Text = " || Số lượng tài khoản: " + (dgvListTaiKhoan.RowCount - 1).ToString();
            btCapNhat.Enabled = false;
            btXoa.Enabled = false;
            btLuu.Visible = false;
            btnHuy.Visible = false;
            gbTimKiem.Visible = false;
        }

        private void dgvListTaiKhoan_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            dgvListTaiKhoan.Rows[e.RowIndex].Cells["STT"].Value = e.RowIndex + 1;
        
        }
        string email;
        private void dgvListTaiKhoan_Click(object sender, EventArgs e)
        {
            if (this.dgvListTaiKhoan.SelectedRows.Count > 0)
            {
                try
                {
                    for (int i = dgvListTaiKhoan.SelectedRows.Count - 1; i >= 0; i--)
                    {

                        email = dgvListTaiKhoan.SelectedRows[i].Cells[3].Value.ToString();
                        
                    }
                    DataGridViewRow drow = this.dgvListTaiKhoan.SelectedRows[0];
                    DataRowView row = drow.DataBoundItem as DataRowView;
                    this.txtTen.Text = row[0].ToString();
                    this.txtMatKhau.Text = row[1].ToString();
                    this.txtMail.Text = row[2].ToString();
                    this.cbbQuyen.Text = row[3].ToString();
                    //defaul
                    ssThongBao.Text = "Thông báo";
                }
                catch { }
            }
            btCapNhat.Enabled = true;
            btXoa.Enabled = true;
            btThem.Enabled = true;
            txtTen.Enabled = false;
            gbTimKiem.Visible = false;
            ssThongBao.Text = "Thông báo";
            txtTimTen.Text = txtTimMail.Text = "";
            cbbTimQuyen.Text = null;
            btSearch.Enabled = true;
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            LoadList(sender, e);
            txtTen.Enabled = true;
            btXoa.Enabled = false;
            btCapNhat.Enabled = false;
            txtTen.Text = "";
            txtMatKhau.Text = "";
            txtMail.Text = "";
            cbbQuyen.Text = null;
            dgvListTaiKhoan.Enabled = false;
            btThem.Enabled = false;
            btnHuy.Visible = true;
            btLuu.Visible = true;
        }
        string match = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";  
        private void btLuu_Click(object sender, EventArgs e)
        {
            
            if (this.txtTen.Text.Trim().Length == 0)
            {

                this.txtTen.Focus();
                MessageBox.Show("Chưa nhập tên đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            else
                if (this.txtMatKhau.Text.Trim().Length == 0 || this.txtMatKhau.Text.Trim().Length <6)
                {

                    this.txtMatKhau.Focus();
                    MessageBox.Show("Nhập mật khẩu từ 6 ký tự trở lên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                else
                    if (this.txtMail.Text.Trim().Length == 0)
                    {
                        this.txtMail.Focus();
                        MessageBox.Show("Nhập email", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else

                    {
                        Regex reg = new Regex(match);
                        if (!reg.IsMatch(this.txtMail.Text))
                        {
                            this.txtMail.Focus();
                            MessageBox.Show("Email không hợp lệ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                    }
                        if (this.cbbQuyen.Text.Trim().Length == 0)
                        {
                            this.cbbQuyen.Focus();
                            MessageBox.Show("Chọn quyền", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        else
                        if (KiemTraTK())
                        {
                            txtTen.Focus();
                            MessageBox.Show("Tên tài khoản đã tồn tại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        else
                            if (KiemTraEmail())
                            {
                                txtMail.Focus();
                                MessageBox.Show("Email này đã được sử dụng, chọn email khác", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                              else
                            
                                {
                                    try
                                    {
                                        this.myConnection.Open();
                                        myCommand.CommandText = "insert into TaiKhoan values (N'" + txtTen.Text + "','" + txtMatKhau.Text + "','" + txtMail.Text + "','" + cbbQuyen.Text + "')";
                                        myCommand.CommandType = CommandType.Text;
                                        myCommand.ExecuteNonQuery();
                                        this.myConnection.Close();
                                        btThem.Enabled = true;
                                        dgvListTaiKhoan.Enabled = true;
                                        btLuu.Visible = false;
                                        btnHuy.Visible = false;
                                        ssThongBao.Text = "Đã thêm tài khoản thành công";
                                    }
                                    catch
                                    {
                                        MessageBox.Show("Đăng ký không thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        ssThongBao.Text = "Thông báo";
                                    }
                                
                            }

            LoadList(sender, e);
        }
        private bool KiemTraTK()
        {
            for (int i = 0; i < this.dgvListTaiKhoan.Rows.Count - 1; i++)
            {

                if (string.Compare(txtTen.Text, dgvListTaiKhoan.Rows[i].Cells[1].Value.ToString(), true) == 0)
                    return true;
            }
            return false;
        }
        public bool KiemTraEmail()
        {

            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select * from TaiKhoan
                                            where(Email=@Email)";
            myCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = txtMail.Text;
            myDataAdapter.SelectCommand = myCommand;
            myDataAdapter.Fill(dt);
            bool kq = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i][2].ToString() == txtMail.Text)
                {
                    kq = true;
                    break;
                }

            }
            return kq;
        }
        private bool KiemTraMailCapNhat()
        {
            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select * from TaiKhoan";
            myDataAdapter.SelectCommand = myCommand;
            myDataAdapter.Fill(dt);
            bool kq = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {

                if (txtMail.Text.CompareTo(email) == 0)
                    return false;
                else
                {
                    kq = true;
                }
            }
            return kq;
        }
        private void btnHuy_Click(object sender, EventArgs e)
        {
            dgvListTaiKhoan.Enabled = true;
            LoadList(sender, e);
            btnHuy.Visible = false;
            btThem.Enabled = true;
            gbTimKiem.Visible = false;
            ssThongBao.Text = "Thông báo";
            txtTimTen.Text = txtTimMail.Text = "";
            cbbTimQuyen.Text = null;
            btSearch.Enabled = true;
            txtMail.Text = txtTen.Text = txtMatKhau.Text = cbbQuyen.Text= "";
        }

        private void btXoa_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn muốn xóa tài khoản đã chọn?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                for (int i = dgvListTaiKhoan.SelectedRows.Count - 1; i >= 0; i--)
                {
                    try
                    {
                        string ma = dgvListTaiKhoan.SelectedRows[i].Cells[1].Value.ToString();
                        if (this.myConnection.State == ConnectionState.Closed)
                            this.myConnection.Open();
                        myCommand.CommandText = "delete from VeXe where TenTK ='" + ma + "' delete from TaiKhoan where TenTK ='" + ma + "'";
                        myCommand.ExecuteNonQuery();
                        myConnection.Close();
                        DataGridViewRow row = this.dgvListTaiKhoan.SelectedRows[i];
                        dgvListTaiKhoan.Rows.Remove(row);
                    }
                    catch { MessageBox.Show("Xóa không thành công"); }
                }
                ssThongBao.Text = "Đã xóa thành công";
                ssCount.Text = " || Số tài khoản: " + (dgvListTaiKhoan.RowCount - 1).ToString();
                MacDinh();
            }
        }
        private void MacDinh()
        {
            txtTen.Text = "";
            txtMail.Text = "";
            txtMatKhau.Text = "";
            cbbQuyen.Text = null;
        }

        private void FormTaiKhoan_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Dispose();
            this.Hide();
            FormMain frm = new FormMain();
            frm.Show();
        }

        private void btCapNhat_Click(object sender, EventArgs e)
        {
            txtTen.Enabled = false;
            if (this.txtTen.Text.Trim().Length == 0)
            {

                this.txtTen.Focus();
                MessageBox.Show("Chưa nhập tên đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            else
                if (this.txtMatKhau.Text.Trim().Length == 0 && this.txtMatKhau.Text.Trim().Length < 6)
                {

                    this.txtMatKhau.Focus();
                    MessageBox.Show("Nhập mật khẩu từ 6 ký tự trở lên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                else
                    if (this.txtMail.Text.Trim().Length == 0)
                    {
                        this.txtMail.Focus();
                        MessageBox.Show("Nhập email", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        Regex reg = new Regex(match);
                        if (!reg.IsMatch(this.txtMail.Text))
                        {
                            this.txtMail.Focus();
                            MessageBox.Show("Email không hợp lệ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                    }
                        if (this.cbbQuyen.Text.Trim().Length == 0)
                        {
                            this.cbbQuyen.Focus();
                            MessageBox.Show("Chọn quyền", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        else
                            if (KiemTraMailCapNhat())
                            {
                                this.txtMail.Focus();
                                MessageBox.Show("Trùng email đăng ký, vui lòng chọn email khác", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                             else
                            {
                                try
                                {
                                   
                                    if (this.myConnection.State == ConnectionState.Closed)
                                        this.myConnection.Open();
                                    myCommand.CommandText = " Update TaiKhoan set MatKhau='" + txtMatKhau.Text + "',Email='" + txtMail.Text + "',Quyen=N'" + cbbQuyen.Text + "' where TenTK = '" + txtTen.Text + "'";
                                    myCommand.CommandType = CommandType.Text;
                                    myCommand.ExecuteNonQuery();
                                    this.myConnection.Close();
                                    btThem.Enabled = true;
                                    dgvListTaiKhoan.Enabled = true;
                                    btLuu.Visible = false;
                                    btnHuy.Visible = false;
                                    ssThongBao.Text = "Đã cập nhật tài khoản";
                                }
                                catch
                                {
                                    MessageBox.Show("Cập nhật không thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    ssThongBao.Text = "Thông báo";
                                }

                            }

            LoadList(sender, e);
        }

        private void btSearch_Click(object sender, EventArgs e)
        {
            txtTen.Enabled = true;
            txtTen.Text = "";
            txtMatKhau.Text = "";
            txtMail.Text = "";
            cbbQuyen.Text = null;
            btThem.Enabled = false;
            gpChiTiet.Text = "Nhập thông tin tìm kiếm";
            gbTimKiem.Visible = true;
            btSearch.Enabled = false;
        }
        
        

        private void btnHuyTim_Click(object sender, EventArgs e)
        {
            btnHuy_Click(sender, e);
        }

        private void btRefresh_Click(object sender, EventArgs e)
        {
            btnHuy_Click(sender, e);
        }

        private void dgvListTaiKhoan_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            dgvListTaiKhoan_Click(sender, e);
        }

        private void Tìm_Click(object sender, EventArgs e)
        {
            
            if (txtTimMail.Text.Trim().Length == 0 && txtTimTen.Text.Trim().Length == 0 && cbbTimQuyen.Text.Trim().Length == 0)
            {
                ssThongBao.Text = "Nhập thông tin tìm kiếm";
            }
            else
            {
                try
                {
                    
                    myCommand.CommandText = "select * FROM TaiKhoan where TenTK like N'" + "%" + txtTimTen.Text + "%" + "' and Email like N'" + "%" + txtTimMail.Text + "%" + "' and Quyen like N'" + "%" + cbbTimQuyen.Text + "%" + "'";
                    myCommand.CommandType = CommandType.Text;
                    if (this.myConnection.State == ConnectionState.Closed)
                        this.myConnection.Open();
                    myDataAdapter = new SqlDataAdapter(myCommand);
                    DataSet ds = new DataSet();
                    myDataAdapter.Fill(ds, "TaiKhoan");
                    this.dgvListTaiKhoan.DataSource = ds.Tables[0];

                    if (dgvListTaiKhoan.RowCount == 1)
                    {
                        ssThongBao.Text = "Không tìm thấy";
                        this.myConnection.Close();
                    }
                    else
                    {
                        ssThongBao.Text = "Đã tìm thấy " + (dgvListTaiKhoan.RowCount - 1).ToString() + " tài khoản";
                        gbTimKiem.Visible = true;
                    }
                }
                catch { }
            }
        }

    }
}
